#ifndef NOARVORE_H_
#define NOARVORE_H_

#include <iostream>
#include <string>
#include <vector>
#include "NoHash.h"


using namespace std;

// N� de arvore sintatica

class NoArvore
{
public:

	NoArvore();
	void SetTerminal(bool);// chama a fun��o quand
	void SetTokem(string );//seta nome do tokem
	void InsereFilho(NoArvore *);// isnere um filho no n�
	void InsereVar(NoHash * );
	//semantico
	void SetNivel(int mN){mNivel = mN;};
	int GetNivel(){ return mNivel;};
	//inserido semantico
	bool IsTerminal(){ return mIsTerminal;};
	string mostra();
	vector<NoArvore*> GetFilhos();
	// inserido semantico
	// retorna se eh uma variavel ou nao
	bool IsVariavel();
	virtual ~NoArvore();
	// inserido com semantico
	NoHash *GetNoHash(){ return mVariaveis;}
	//semantico
	void SetTipoLexico(int mN){mTipoLexico = mN;};
	int GetTipoLexico(){return mTipoLexico;}
	string GetToken();
	void SetAvaliado();
	bool GetAvaliado();

private:
	int mTipoLexico;
	bool mIsAvaliado;//se ja foi avaliado pelo gerador
	bool mIsTerminal;// se for terminal n�o haver� deriva��es
	//semantico
	int mNivel;
	string mTokem; // nome do tokem inserido na hash
	vector<NoArvore*> mFilhos; //vetor para os filhos da arvore
	NoHash *mVariaveis; // variaveis que es�o presentes na hash de indentificadores
	// apontam para a superclasse cujos filhos s�o direfernciados
};

#endif /*NOARVORE_H_*/
